上回在"磁碟系統的運作"那篇中有提到檔案系統的資訊是記錄在磁碟的每個partition中的第一個sector,又稱superblock;而partition的資訊則是記錄在磁碟系統中第一個sector(第1片磁碟,第0軌的第1個sector),又稱MBR。所以稱MBR是磁碟系統運作最重要的地方也不為過了。
上回在"磁碟系統的運作"那篇中有提到檔案系統的資訊是記錄在磁碟的每個partition中的第一個sector,又稱superblock;而partition的資訊則是記錄在磁碟系統中第一個sector(第1片磁碟,第0軌的第1個sector),又稱MBR。所以稱MBR是磁碟系統運作最重要的地方也不為過了。
MBR除了記載partition的資訊之外,更重要的是肩負開機任務的bootloader。在電腦電源打開之後BIOS會將bootloader的內容載入記憶體執行,而這裡面的程式的工作就是連結到作業系統所產生的開機磁區,接著就是一步步的開機動作:
現在的電腦可以安裝多個不同的作業系統,再透過多重開機的方式來切換。多重開機的原理,是在開機程式中記載每個作業系統核心所在的分割區,並提供介面讓使用者選擇要載入那個作業系統的核心。不同的作業系統必須安裝在不同的partition,而每個partition的superblock(在此又被稱為 boot sector)都可以安裝開機程式,所以支援多重開機的作業系統如Linux的開機管理程式--GRUB可以在bootloader之後,取得開機程式的設定,讓使用者直接選定他所需要的核心來開機。而在Windows作業系統中,由於他的開機程式無法辨識其他可開機的boot sector,所以他可以藉由如GRUB來指向他以進行多重開機。
我們舉例來說明,假如你的硬碟有三個分割區,依序分別安裝著Windows XP、Fedora Linux與SUSE Linux。這時Windows XP的開機程式會安裝在MBR中的bootloader區域,而Fedora與SUSE你可以皆在他們所在partition的boot secotor中安裝GRUB以供開機選擇,或是僅安裝其一Linux的開機程式即可。因為GRUB可以辨識增包括Windows XP在內的開機區,我們只需將開機區的資訊記錄到GRUB程式的設定檔grub.conf中即可。
在這篇文章中有一個有趣的問題點,就是在開機之前沒有檔案系統的情況下,如何在磁碟中找到作業系統的核心並且把他載入執行? 畢竟搜尋與讀取的工作是檔案系統的職責。魔法就在開機程式中,開機程式有預設的檔案系統(例如GRUB中的stage 1.5),足以以讓開機程式載入核心。
裝server 的時候,最討厭遇到的問題,就是MBR...
收到太陽大的回應,好像是親眼收到偶像的簽名一樣,真是好High呀。
chiounan 提到:
好High呀
我剛玩大富翁,又沒逃掉,損失17xxxx,也是滿High的...
MBR真的很討厭,尤其是同樣的硬碟,裝過不同的平台的OS...
chiounan提到:
我們舉例來說明,假如你的硬碟有三個分割區,依序分別安裝著Windows XP、Fedora Linux與SUSE Linux。這時Windows XP的開機程式會安裝在MBR中的bootloader區域,而Fedora與SUSE你可以皆在他們所在partition的boot se...(恕刪)
這樣講怪怪的...基本上在mbr裝了xp的bootloader,他也只認得windows的partition跟如何載入。如果要讓XP有能力多重開機進入Linux,常常會用grub4dos,xp的作業系統載入程式,可以在boot.ini設定後,載入不同的image檔案,利用grub4dos的image檔案,就可以在xp開機時用選單進入grub,再由grub載入不同partition的linux kernel。
如果在mbr安裝的是windows的bootloader的話,他的功能很簡單,大概就是檢查在partition table中標示為active的分割區的第一個sector中是否有該有的signature,然後把他載入記憶體(我沒記錯的話)。然後boot sector中的程式會載入ntldr等等...不過太久沒看這些,不知道記得東西對不對